export function throw:[E]
    &(E) => Async[never,E]
    native '__Throw';

export function crash-on-error:[T]
    &(Async[T,Error]) => Async[T]
    &(action) => action.{ catch &(err) => { crash err } };
export function crash-on-error:[T]
    &(Observable[T,Error]) => Observable[T]
    &(action) => action.{ catch &(err) => { crash err } };

export function catch:[T,E,F]
    &(Observable[T,E], &(E) => Observable[T,F]) => Observable[T,F]
    native '__Catch';
export function catch:[T,E,F]
    &(Async[T,E], &(E) => Async[T,F]) => Async[T,F]
    native '__Catch';

export function catch-retry:[T,E]
    &(Observable[T,E], &(E) => Async[Bool]) => Observable[T,E]
    native '__CatchRetry';
export function catch-retry:[T,E]
    &(Async[T,E], &(E) => Async[Bool]) => Async[T,E]
    native '__CatchRetry';

export function catch-throw:[T,E,F]
    &(Observable[T,E], &(E) => F) => Observable[T,F]
    native '__CatchThrow';
export function catch-throw:[T,E,F]
    &(Async[T,E], &(E) => F) => Async[T,F]
    native '__CatchThrow';

export function catch-none:[T,E]
    &(Async[T,E], &(E) => Async) => Async[Maybe[T]]
    native '__CatchNone';

export function catch-complete:[T,E]
    &(Observable[T,E], &(E) => Async) => Observable[T]
    native '__CatchComplete';


